package top.wshape1.shiziapi.project.service;

import com.baomidou.mybatisplus.extension.service.IService;
import top.wshape1.shiziapi.project.domain.Api;
import top.wshape1.shiziapi.project.domain.ApiTag;
import top.wshape1.shiziapi.project.domain.vo.*;

import java.util.List;

/**
 * @author Wshape1
 * @description 针对表【t_project_api】的数据库操作Service
 * @since 2023-10-22 18:21:51
 */
public interface ApiService extends IService<Api> {

    /**
     * 创建一个API文档
     *
     * @param createDocVo
     * @return
     */
    Long create(CreateDocVo createDocVo);

    /**
     * 重命名API文档
     *
     * @param id
     * @param name
     */
    void rename(Long id, String name);

    /**
     * 删除一个API文档
     *
     * @param id
     */
    void delete(Long id);

    /**
     * 通过目录id删除
     *
     * @param id
     */
    void deleteByParentFolderId(Long id);

    /**
     * 获取parentFolderId下的Api文档ID
     *
     * @param parentFolderId
     * @return
     */
    List<Long> getIdsByParentFolderId(Long parentFolderId);

    /**
     * 更新order和parentFolderId
     *
     * @param id
     * @param order
     * @param parentFolderId
     */
    void updateOrderAndParentFolderId(Long id, Integer order, Long parentFolderId);

    /**
     * 只更新order
     *
     * @param id
     * @param order
     */
    void updateOrder(Long id, Integer order);

    /**
     * 保存Tag
     *
     * @param createTagVo
     * @param userId
     * @return
     */
    Long createTag(CreateTagVo createTagVo, Long userId);

    /**
     * 移除Tag
     *
     * @param twoIdVo
     * @param id
     */
    void removeTag(TwoIdVo twoIdVo, Long id);

    /**
     * 获取tag列表
     *
     * @param twoIdVo
     * @param userId
     * @return
     */
    List<ApiTag> listTag(TwoIdVo twoIdVo, Long userId);

    /**
     * 添加一个内容
     *
     * @param createContentVo
     * @param id
     * @return
     */
    Long createContent(CreateContentVo createContentVo, Long id);

    /**
     * 删除一个内容
     *
     * @param removeContentVo
     * @param id
     */
    void removeContent(RemoveContentVo removeContentVo, Long id);

    /**
     * 重命名一个内容的label
     *
     * @param renameContentVo
     * @param id
     */
    void renameContent(RenameContentVo renameContentVo, Long id);

    /**
     * 获取文档的整体数据
     *
     * @param twoIdVo
     * @param userId
     * @return
     */
    ApiDataVo getApiData(TwoIdVo twoIdVo, Long userId);

    /**
     * 保存文档
     *
     * @param apiDataVo
     * @param userId
     */
    void saveApiData(ApiDataVo apiDataVo, Long userId);

    /**
     * 清空API文档
     * @param projectId
     */
    void clearProject(long projectId);

    /**
     * 获取项目下的所有API文档ID
     * @param projectId
     * @return
     */
    List<Long> getIdsByProjectId(long projectId);
}
